home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SPACE 2
/
SPACE - Library 2 - Volume 1.iso
/
apps
/
625
/
necro62
/
necro_62.gfa
(
.txt
)
< prev
next >
Wrap
GFA-BASIC Atari
|
1992-09-06
|
19KB
|
818 lines
' Lets Try This Again!
'
' Dr. Necro
' By Ken Schafer
'
' Revision History
' ----------------
'
' Ver 0.62 8/6/92
' -------------------
' New concept for virus animations. Viruses are animated round robin style, a
' few each interrupt. This should spread the load more evenly, and perhaps
' increase performance to an acceptable level.
'
' Ver 0.61a 2/8/92
' -------------------
' Re-vamped sprite system, routines for virus animation added
' animation is too much of a drain on processor resources.
' barely playable on a 16MHz machine.
'
' Ver 0.60 -- 12/14/91
' --------------------
' Internal Cleanup in preparation for C translation
' (check_lines and erase_lines are MUCH nicer)
'
' Ver 0.58 -- 11/20/91
' --------------------
' Fixed small bug that occasionally preventing game from ending
' when it should (Stooooooopid mistake!) (thanx Mom!)
'
' Ver 0.57 -- 7/31/91 -- RELEASED AS VER 0.85b (oops!)
' -------------------
' Joystick routines added(0.57)
' Sadistic music added as an experiment(0.56)
'
' Ver 0.55 -- 6/23/91
' -------------------
' Levels now function. Game is playable as is
' Needs Title Screen, sound, animation and cleanup
'
' Ver 0.52 -- 6/21/91
' -------------------
' Added routines to implement virus display and scoring
'
' Ver 0.50 -- 6/21/91
' -------------------
' Lots of Changes -- Pills now have proper shape (tops, sides etc)
' Added all changes to checking routines to implement various shapes
' Pills that are linked now have bonds and hold each other up!
'
' Ver 0.40 -- 6/19/91
' -------------------
' Replaced boxes with actual bitmaps
' Added Background Picture --------- Things are getting REAL cool!
'
' Ver 0.31 -- 5/26/91
' -------------------
' Added routines to allow individual pill pieces to fall
'
' Ver 0.30 -- 4/20/91
' -------------------
' Added boxes instead of debug numbers
' Began Coding routines to check/erase lines
'
' Ver 0.21 -- 4/18/91
' -------------------
' First version as Dr. Necro
' Replaced screen point checking with an array lookup -- much faster
'
' Ver 0.14 -- 1/20/91
' -------------------
' Originally the beginnings of a Tetris clone...
' The main logic for Dr. Necro was "extracted" from here.
'
'
' Constants
'
v1_0$="0.62"
v1_1$="9/6/92"
'
v0_D#=0
v0_E#=128
v0_F#=1
v0_10#=0
v0_11#=5
v0_12#=1
v0_13#=0
v0_14#=1
v0_15#=0
v0_16#=16
v0_17#=4
v0_4C#=32
' Bottle descriptor Dec,Bit, Meaning
' ( 1) 0 Color 0=Empty 2=Blue A color with no piece desc bit set
' ( 2) 1 Info 1=Yellow 3=Red (bits 2-5) indicate a single piece
' ( 4) 2 Right Half
' ( 8) 3 Left Half
' ( 16) 4 Bottom Half
' ( 32) 5 Top Half
' ( 64) 6 Virus
' (128) 7 Wall piece
'
' Init
'
DIM v4_0#(15)
DIM v4_1#(15)
DIM v4_2#(15,25)
DIM v4_3#(20,2)
DIM v5_0$(32008)
DIM v5_2$(30)
DIM v5_3$(15)
DIM v5_4$(5)
DIM v4_7#(100,5)
'
' animation descriptor
' array dim meaning
' ------------------------
' 0 animation frame
' 1 bottle x coordinate
' 2 bottle y coordinate
' 3 virus color
' 4 screen x
' 5 screen y
'
ARRAYFILL v4_3#(),0
ARRAYFILL v4_7#(),-1
'
FOR v0_18#=0 TO 15
READ v4_1#(v0_18#)
v4_0#(v0_18#)=XBIOS(7,v0_18#,-1)
NEXT v0_18#
'
DATA 0,1792,1536,551,112,7,96,1908,1365,1856,1540,823,7,1365,819,1911
'
@vB_0
@vB_1
v0_19#=FALSE
@vB_17
STICK 1
v0_5A#=0
WHILE NOT v0_19#
IF v0_1A#=0
WAVE 0
EVERY STOP
v0_1B#=0
INC v0_14#
@vB_2
PUT 0,0,v1_2$,3
@vB_3
@vB_1
v0_45#=0
IF v0_14#=4
GOSUB vB_23
ENDIF
EVERY 4 GOSUB vB_21
ENDIF
@vB_4
v0_1C#=FALSE
WHILE NOT v0_1C#
v0_1D#=TIMER+105-(v0_14#*5)-INT(v0_1B#/50)
INC v0_1B#
PRINT AT(1,5);105-(v0_14#*5)-INT(v0_1B#/50);" ";
v0_62#=0
WHILE TIMER<v0_1D#
' IF stick=FALSE
v1_3$=RIGHT$(INKEY$,1)
SELECT v1_3$
CASE "H"
@vB_5
CASE "K"
@vB_6
CASE "M"
@vB_7
CASE "P"
v0_1D#=TIMER
ENDSELECT
' ELSE
v0_48#=STICK(1)
IF v0_48#<>v0_49#
SELECT v0_48#
CASE 4
@vB_6
CASE 8
@vB_7
CASE 2
v0_1D#=TIMER
ENDSELECT
v0_49#=v0_48#
ENDIF
v0_4A#=STRIG(1)
IF v0_4A#<>v0_4B#
IF STRIG(1)
@vB_5
ENDIF
v0_4B#=v0_4A#
ENDIF
' ENDIF
WEND
@vB_8
IF NOT v0_1C#
@vB_9(v0_1F#,v0_20#,v0_21#)
INC v0_20#
@vB_A(v0_1F#,v0_20#,v0_22#,v0_23#,v0_21#)
ELSE
v0_24#=1
v0_54#=100
WHILE v0_24#>0
v0_24#=0
@vB_B
IF v0_26#>0 THEN
@vB_C
ADD v0_54#,100
ENDIF
@vB_D
WEND
'
ENDIF
WEND
WEND
PRINT AT(5,10);"Game_Over"
'
FUNCTION vE_0(v0_2E#,v0_2F#)
v0_59#=TRUE
IF v4_2#(v0_2E#,v0_2F#)<>v0_D#
v0_59#=FALSE
ENDIF
RETURN v0_59#
ENDFUNC
'
PROCEDURE vB_3
ARRAYFILL v4_2#(),v0_D#
FOR v0_27#=3 TO 20
v4_2#(0,v0_27#)=v0_E#
v4_2#(9,v0_27#)=v0_E#
NEXT v0_27#
FOR v0_27#=1 TO 9
v4_2#(v0_27#,20)=v0_E#
NEXT v0_27#
FOR v0_27#=0 TO 3
v4_2#(3,v0_27#)=v0_E#
v4_2#(6,v0_27#)=v0_E#
v4_2#(v0_27#,3)=v0_E#
v4_2#(v0_27#+6,3)=v0_E#
NEXT v0_27#
RETURN
'
> PROCEDURE vB_4
v0_1F#=4
v0_20#=0
v0_22#=INT(RND*3)+1
v0_23#=INT(RND*3)+1
v0_21#=v0_12#
RETURN
'
> PROCEDURE vB_5
IF v0_20#>0
IF v0_21#=v0_13#
v0_28#=@vE_0(v0_1F#+1,v0_20#)
ELSE
v0_28#=@vE_0(v0_1F#,v0_20#-1)
ENDIF
IF v0_28#=TRUE
IF v0_21#=v0_13#
SWAP v0_22#,v0_23#
ENDIF
@vB_9(v0_1F#,v0_20#,v0_21#)
v0_21#=1-v0_21#
@vB_A(v0_1F#,v0_20#,v0_22#,v0_23#,v0_21#)
ENDIF
ENDIF
RETURN
'
> PROCEDURE vB_6
v0_55#=@vE_0(v0_1F#-1,v0_20#)
IF v0_21#=v0_13#
v0_56#=@vE_0(v0_1F#-1,v0_20#-1)
ELSE
v0_56#=@vE_0(v0_1F#-1,v0_20#)
ENDIF
IF v0_56#=FALSE
v0_55#=FALSE
ENDIF
IF v0_55#=TRUE
@vB_9(v0_1F#,v0_20#,v0_21#)
DEC v0_1F#
@vB_A(v0_1F#,v0_20#,v0_22#,v0_23#,v0_21#)
ENDIF
RETURN
'
> PROCEDURE vB_7
v0_55#=@vE_0(v0_1F#+1,v0_20#)
IF v0_21#=v0_13#
v0_56#=@vE_0(v0_1F#+1,v0_20#-1)
ELSE
v0_56#=@vE_0(v0_1F#+2,v0_20#)
ENDIF
IF v0_56#=FALSE
v0_55#=FALSE
ENDIF
IF v0_55#=TRUE
@vB_9(v0_1F#,v0_20#,v0_21#)
INC v0_1F#
@vB_A(v0_1F#,v0_20#,v0_22#,v0_23#,v0_21#)
ENDIF
RETURN
'
> PROCEDURE vB_8
v0_58#=TRUE
v0_57#=@vE_0(v0_1F#,v0_20#+1)
IF v0_21#=v0_12#
v0_58#=@vE_0(v0_1F#+1,v0_20#+1)
ENDIF
v0_1C#=FALSE
IF (v0_57#=FALSE OR v0_58#=FALSE)
v0_1C#=TRUE
ENDIF
IF v0_1C#=TRUE
IF v0_21#=v0_12#
v4_2#(v0_1F#,v0_20#)=v0_22# OR 8
v4_2#(v0_1F#+1,v0_20#)=v0_23# OR 4
ELSE
v4_2#(v0_1F#,v0_20#)=v0_22# OR 16
v4_2#(v0_1F#,v0_20#-1)=v0_23# OR 32
ENDIF
IF v0_20#<=2
vB_10
v0_19#=TRUE
ENDIF
ENDIF
RETURN
'
> PROCEDURE vB_9(v0_1F#,v0_20#,v0_21#)
IF v0_21#=v0_13#
PRINT AT(v0_1F#+v0_16#,v0_20#+v0_17#);" ";
PRINT AT(v0_1F#+v0_16#,v0_20#+v0_17#-1);" ";
ELSE
PRINT AT(v0_1F#+v0_16#,v0_20#+v0_17#);" ";
PRINT AT(v0_1F#+1+v0_16#,v0_20#+v0_17#);" ";
ENDIF
RETURN
'
> PROCEDURE vB_A(v0_2C#,v0_2D#,v0_22#,v0_23#,v0_21#)
ADD v0_2C#,v0_16#
ADD v0_2D#,v0_17#
DEC v0_2C#
DEC v0_2D#
MUL v0_2C#,8
MUL v0_2D#,8
IF v0_21#=v0_13#
PUT v0_2C#,v0_2D#,v5_2$((v0_22#-1)*10+4)
PUT v0_2C#,v0_2D#-8,v5_2$((v0_23#-1)*10+3)
ELSE
PUT v0_2C#,v0_2D#,v5_2$((v0_22#-1)*10+1)
PUT v0_2C#+8,v0_2D#,v5_2$((v0_23#-1)*10+2)
ENDIF
RETURN
'
> PROCEDURE vB_B
v0_26#=0
v0_4F#=0
FOR v0_18#=1 TO 8
FOR v0_27#=19 DOWNTO 4
v0_30#=v0_27#
v0_31#=(v4_2#(v0_18#,v0_27#) AND 3)
IF v0_31#<>v0_D#
WHILE (v4_2#(v0_18#,v0_27#-1) AND 3)=v0_31#
DEC v0_27#
WEND
IF v0_30#-v0_27#>=3
INC v0_4F#
FOR v0_50#=v0_30# DOWNTO v0_27#
v4_3#(v0_26#,1)=v0_18#
v4_3#(v0_26#,2)=v0_50#
INC v0_26#
NEXT v0_50#
ENDIF
ENDIF
NEXT v0_27#
NEXT v0_18#
'
FOR v0_27#=19 DOWNTO 4
FOR v0_18#=8 DOWNTO 4
v0_30#=v0_18#
v0_31#=(v4_2#(v0_18#,v0_27#) AND 3)
IF v0_31#<>v0_D#
WHILE (v4_2#(v0_18#-1,v0_27#) AND 3)=v0_31#
DEC v0_18#
WEND
IF v0_30#-v0_18#>=3
INC v0_4F#
FOR v0_50#=v0_30# DOWNTO v0_18#
v4_3#(v0_26#,1)=v0_50#
v4_3#(v0_26#,2)=v0_27#
INC v0_26#
NEXT v0_50#
ENDIF
ENDIF
NEXT v0_18#
NEXT v0_27#
RETURN
'
> PROCEDURE vB_C
'
v0_32#=0
FOR v0_50#=0 TO v0_26#
v0_18#=v4_3#(v0_50#,1)
v0_27#=v4_3#(v0_50#,2)
IF v4_2#(v0_18#,v0_27#)<>v0_D#
IF v4_2#(v0_18#,v0_27#) AND 8
v4_2#(v0_18#+1,v0_27#)=v4_2#(v0_18#+1,v0_27#) AND 3
@vB_F(v0_18#+1,v0_27#,v4_2#(v0_18#+1,v0_27#))
ENDIF
IF v4_2#(v0_18#,v0_27#) AND 4
v4_2#(v0_18#-1,v0_27#)=v4_2#(v0_18#-1,v0_27#) AND 3
@vB_F(v0_18#-1,v0_27#,v4_2#(v0_18#-1,v0_27#))
ENDIF
IF v4_2#(v0_18#,v0_27#) AND 32
v4_2#(v0_18#,v0_27#+1)=v4_2#(v0_18#,v0_27#+1) AND 3
@vB_F(v0_18#,v0_27#+1,v4_2#(v0_18#,v0_27#+1))
ENDIF
IF v4_2#(v0_18#,v0_27#) AND 16
v4_2#(v0_18#,v0_27#-1)=v4_2#(v0_18#,v0_27#-1) AND 3
@vB_F(v0_18#,v0_27#-1,v4_2#(v0_18#,v0_27#-1))
ENDIF
IF v4_2#(v0_18#,v0_27#) AND 64
@vB_10
DEC v0_1A#
INC v0_32#
ADD v0_15#,v0_54#
ENDIF
@vB_11(v0_18#,v0_27#,v4_2#(v0_18#,v0_27#) AND 3)
v4_2#(v0_18#,v0_27#)=(v4_2#(v0_18#,v0_27#) OR 128) AND 131
ENDIF
NEXT v0_50#
IF v0_32#>1
ADD v0_15#,100*v0_32#
ENDIF
@vB_12
' Pause 30
FOR v0_27#=1 TO 20
FOR v0_18#=1 TO 8
IF v4_2#(v0_18#,v0_27#)>128
v4_2#(v0_18#,v0_27#)=v0_D#
PRINT AT(v0_18#+v0_16#,v0_27#+v0_17#);" ";
ENDIF
NEXT v0_18#
NEXT v0_27#
RETURN
'
> PROCEDURE vB_D
v0_24#=0
FOR v0_27#=19 TO 1 STEP -1
FOR v0_18#=1 TO 8
IF (v4_2#(v0_18#,v0_27#) AND 3)<>v0_D#
IF (v4_2#(v0_18#,v0_27#) AND 8)=8
v0_36#=@vE_0(v0_18#,v0_27#+1)
v0_29#=@vE_0(v0_18#+1,v0_27#+1)
IF (v0_36#=TRUE AND v0_29#=TRUE)
v4_2#(v0_18#,v0_27#+1)=v4_2#(v0_18#,v0_27#)
v4_2#(v0_18#+1,v0_27#+1)=v4_2#(v0_18#+1,v0_27#)
v4_2#(v0_18#,v0_27#)=v0_D#
v4_2#(v0_18#+1,v0_27#)=v0_D#
INC v0_24#
@vB_A(v0_18#,v0_27#+1,v4_2#(v0_18#,v0_27#+1) AND 3,v4_2#(v0_18#+1,v0_27#+1) AND 3,v0_12#)
@vB_9(v0_18#,v0_27#,v0_12#)
ENDIF
ENDIF
IF (v4_2#(v0_18#,v0_27#) AND 16)=16
IF @vE_0(v0_18#,v0_27#+1)=TRUE
v4_2#(v0_18#,v0_27#+1)=v4_2#(v0_18#,v0_27#)
v4_2#(v0_18#,v0_27#)=v4_2#(v0_18#,v0_27#-1)
v4_2#(v0_18#,v0_27#-1)=v0_D#
INC v0_24#
@vB_9(v0_18#,v0_27#,v0_13#)
@vB_A(v0_18#,v0_27#+1,v4_2#(v0_18#,v0_27#+1) AND 3,v4_2#(v0_18#,v0_27#) AND 3,v0_13#)
ENDIF
ENDIF
IF (v4_2#(v0_18#,v0_27#)>0 AND v4_2#(v0_18#,v0_27#)<4)
IF @vE_0(v0_18#,v0_27#+1)=TRUE
@vB_F(v0_18#,v0_27#+1,v4_2#(v0_18#,v0_27#))
PRINT AT(v0_18#+v0_16#,v0_27#+v0_17#);" ";
v4_2#(v0_18#,v0_27#+1)=v4_2#(v0_18#,v0_27#)
v4_2#(v0_18#,v0_27#)=v0_D#
INC v0_24#
ENDIF
ENDIF
ENDIF
NEXT v0_18#
NEXT v0_27#
RETURN
'
> PROCEDURE vB_11(v0_37#,v0_38#,v0_39#)
ADD v0_37#,v0_16#
ADD v0_38#,v0_17#
DEC v0_37#
DEC v0_38#
MUL v0_37#,8
MUL v0_38#,8
PUT v0_37#,v0_38#,v5_2$((v0_39#-1)*10+5)
RETURN
'
> PROCEDURE vB_F(v0_3A#,v0_3B#,v0_3C#)
ADD v0_3A#,v0_16#
ADD v0_3B#,v0_17#
DEC v0_3A#
DEC v0_3B#
MUL v0_3A#,8
MUL v0_3B#,8
PUT v0_3A#,v0_3B#,v5_2$((v0_3C#-1)*10)
RETURN
'
PROCEDURE vB_13
PRINT DIR$(0)
v1_2$=SPACE$(32000)
OPEN "I",#1,"stuff.PUT"
v1_2$=INPUT$(32006,#1)
CLOSE #1
PUT 0,0,v1_2$,3
OPEN "I",#1,"necshape.nec"
FOR v0_18#=0 TO 29
v5_2$(v0_18#)=INPUT$(70,#1)
NEXT v0_18#
FOR v0_18#=0 TO 14
v5_3$(v0_18#)=INPUT$(70,#1)
NEXT v0_18#
FOR v0_18#=0 TO 3
v5_4$(v0_18#)=INPUT$(70,#1)
NEXT v0_18#
CLOSE #1
RETURN
'
> PROCEDURE vB_14
FOR v0_18#=0 TO 15
v2_0%=XBIOS(7,v0_18#,v4_0#(v0_18#))
NEXT v0_18#
SPOKE (&H484),PEEK(&H484) OR 1
WAVE 0
STICK 0
RETURN
'
> PROCEDURE vB_15
FOR v0_18#=v0_3D# TO 15
SETCOLOR v0_18#,v4_1#(v0_18#)
NEXT v0_18#
' kill keyclick
SPOKE (&H484),PEEK(&H484) AND 254
RETURN
'
PROCEDURE vB_0
@vB_15
CLS
DEFTEXT 6,1,0,32
TEXT 0,25,"Dr. Necro"
DEFTEXT 4,0,0,6
TEXT 0,35,"GFA Beta Test -- 3 level limit"
DEFTEXT 3,0,0,13
TEXT 0,50,CHR$(189)+"1991,92 NecroWare Productions"
DEFTEXT 7,0,0,13
TEXT 0,65,"Beta "+v1_0$+" "+v1_1$+" By: Ken Schafer"
DEFTEXT 8,0,0,6
TEXT 0,80,"Look for the complete C language version,"
TEXT 0,89,"Coming in Winter 1992 to a BBS near you!"
DEFTEXT 9,0,0,4
TEXT 0,100,"This version (GFA 0.62r) is GIGGLE-WARE!"
TEXT 0,107,"After you chuckle at its crudeness, you are asked"
TEXT 0,114,"to send me a letter with your comments, suggestions"
TEXT 0,121,"and bug-reports. checks are fine too! =)"
DEFTEXT 11,0,0,6
TEXT 0,135,"Special Thanx to the 3 individuals who"
TEXT 0,144,"registered version 0.58b!!!"
DEFTEXT 10,0,0,6
TEXT 0,154,"Gordon Meyer Michael Starnes"
TEXT 0,163,"Wilfred Lussier"
DEFTEXT 12,0,0,6
TEXT 0,175,"It is your comments, checks and letters"
TEXT 0,184,"that kept me working on this!!"
DEFTEXT 13,0,0,6
TEXT 0,193,"THANK YOU! _Ken Schafer_"
v0_3E#=INP(2)
CLS
@vB_13
@vB_3
RETURN
'
PROCEDURE vB_23
CLS
PRINT "DEMO OVER! =("
PRINT
PRINT "Some notes:"
PRINT "This is only a GFA BASIC version."
PRINT "I originally started this project with"
PRINT "GFA v.2.02 and zipped it over to v.3.05"
PRINT "when I upgraded. Unfortunately, Basic"
PRINT "is not fast enough to do the animation"
PRINT "on the higher levels, so I began moving"
PRINT "to Laser C. The C version is only up to"
PRINT "0.27, but functions exactly like this,"
PRINT "minus the sound and animation. (Well,"
PRINT "almost, the C routines are much cleaner"
PRINT "and fix bugs you may have noticed in"
PRINT "the do_falls() and check_lines() code)"
PRINT
PRINT "Thank you for sampling this teaser!"
PRINT "be sure to get the finished version"
PRINT "when I release it, and remember, it"
PRINT "WILL be shareware."
PRINT "Please pay for what you use!"
PRINT
PRINT "press * to exit!"
WHILE v1_3$<>"*"
v1_3$=RIGHT$(INKEY$,1)
WEND
@vB_14
~GEMDOS(76,0)
RETURN
'
> PROCEDURE vB_12
COLOR 0
DEFFILL 1
GRAPHMODE 2
DEFTEXT 0,0,0,6
v1_4$=LEFT$("0000000",7-LEN(STR$(v0_15#)))+STR$(v0_15#)
PBOX 48,56,102,64
TEXT 48,62,v1_4$
COLOR 11
DEFFILL 14
DEFTEXT 0,0,0,6
v1_5$=LEFT$("00",2-LEN(STR$(v0_1A#)))+STR$(v0_1A#)
PBOX 248,176,263,184
TEXT 248,183,v1_5$
v1_6$=LEFT$("00",2-LEN(STR$(v0_14#)))+STR$(v0_14#)
PBOX 248,128,263,136
TEXT 248,135,v1_6$
GRAPHMODE 1
RETURN
'
> PROCEDURE vB_2
ADD v0_15#,v0_14#*1000
@vB_12
COLOR 12
DEFFILL 11
GRAPHMODE 2
DEFTEXT 1,0,0,6
DEFLINE 0,4,0,0
PRBOX 120,64,200,127
RBOX 120,64,200,127
TEXT 128,78,"GOOD JOB"
TEXT 128,86,"--------"
TEXT 132,94,"Prepare"
TEXT 148,102,"For"
TEXT 144,110,"Next"
TEXT 140,118,"Level"
PAUSE 120
GRAPHMODE 1
RETURN
'
> PROCEDURE vB_1
PUT 0,0,v5_0$(3)
PRINT AT(1,1);"Ver";
PRINT AT(1,2);v1_0$;
PRINT AT(1,4);"Dif";
v0_1A#=v0_14#*4+4
v0_74#=v0_1A#
v0_3F#=10
IF v0_14#>10
ADD v0_3F#,INT((v0_14#-10)/2)
ENDIF
v0_40#=0
FOR v0_18#=1 TO v0_1A#
v0_41#=20-INT(RND*v0_3F#)
v0_42#=INT(RND*8)+1
WHILE v4_2#(v0_42#,v0_41#)<>v0_D#
v0_41#=20-INT(RND*v0_3F#)
v0_42#=INT(RND*8)+1
WEND
INC v0_40#
IF v0_40#=4
v0_40#=1
ENDIF
v4_7#(v0_18#,0)=INT(RND*5)
v4_7#(v0_18#,1)=v0_42#
v4_7#(v0_18#,2)=v0_41#
v4_7#(v0_18#,3)=v0_40#
v4_2#(v0_42#,v0_41#)=64+v0_40#
ADD v0_42#,v0_16#
ADD v0_41#,v0_17#
DEC v0_42#
DEC v0_41#
MUL v0_42#,8
MUL v0_41#,8
v4_7#(v0_18#,4)=v0_42#
v4_7#(v0_18#,5)=v0_41#
PUT v0_42#,v0_41#,v5_3$((v0_40#-1)*5+v0_5A#)
NEXT v0_18#
v0_72#=1
v0_6E#=0
v0_6F#=0
@vB_12
RETURN
'
> PROCEDURE vB_10
FOR v0_43#=5 DOWNTO 2
SOUND 1,15,v0_43#,5,1
NEXT v0_43#
FOR v0_43#=2 TO 5
SOUND 1,15,v0_43#,5,1
NEXT v0_43#
SOUND 1,0,0,0,0
WAVE 37
RETURN
'
PROCEDURE vB_17
RESTORE vA_4
READ v0_4C#
DIM v4_4#(3,v0_4C#),v4_5#(3,v0_4C#)
FOR v0_44#=1 TO 3
FOR v0_18#=1 TO v0_4C#
READ v4_4#(v0_44#,v0_18#)
READ v4_5#(v0_44#,v0_18#)
NEXT v0_18#
NEXT v0_44#
'
v0_45#=0
WAVE 39,7,8
EVERY 4 GOSUB vB_21
RETURN
'
> PROCEDURE vB_21
'
INC v0_6E#
IF v0_6E#=2
GOSUB vB_1C
v0_6E#=0
ENDIF
INC v0_6F#
IF v0_6F#=8
GOSUB vB_18
v0_6F#=0
ENDIF
RETURN
'
> PROCEDURE vB_18
'
INC v0_45#
IF v0_45#=v0_4C#
v0_45#=0
ENDIF
FOR v0_44#=1 TO 3
SOUND v0_44#,0,0,0
WAVE 35
IF v4_4#(v0_44#,v0_45#)<>0
SOUND v0_44#,13,v4_4#(v0_44#,v0_45#),v4_5#(v0_44#,v0_45#)
IF (v0_45#>=193 AND v0_45#<=222)
WAVE 7,7
ELSE
WAVE 35,35,9,5000
ENDIF
ENDIF
NEXT v0_44#
RETURN
'
PROCEDURE vB_1C
'
' handle virus animation
'
FOR v0_67#=1 TO v0_14#+1
INC v0_72#
IF v0_72#>v0_74#
v0_72#=1
ENDIF
IF v4_7#(v0_72#,3)>0
IF v4_2#(v4_7#(v0_72#,1),v4_7#(v0_72#,2)) AND 64
v0_71#=v4_7#(v0_72#,0)
INC v0_71#
IF v0_71#=5
v0_71#=0
ENDIF
v4_7#(v0_72#,0)=v0_71#
PUT v4_7#(v0_72#,4),v4_7#(v0_72#,5),v5_3$((v4_7#(v0_72#,3)-1)*5+v0_71#)
ELSE
v4_7#(v0_72#,3)=0
ENDIF
ENDIF
NEXT v0_67#
RETURN
'
vA_4:
DATA 284
vA_3:
DATA 6,1,6,1,10,1,10,1,1,2,1,2,3,2,3,2,6,2,6,2,3,2,3,2,1,2,1,2,10,1,10,1
DATA 6,1,6,1,10,1,10,1,1,2,1,2,3,2,3,2,6,2,6,2,3,2,3,2,1,2,1,2,10,1,10,1
DATA 11,1,11,1,3,2,3,2,6,2,6,2,8,2,8,2,9,2,9,2,8,2,8,2,6,2,6,2,3,2,3,2
DATA 6,1,6,1,10,1,10,1,1,2,1,2,3,2,3,2,6,2,6,2,3,2,3,2,1,2,1,2,10,1,10,1
DATA 1,2,1,2,5,2,5,2,8,2,8,2,10,2,10,2,11,1,11,1,1,2,1,2,3,2,3,2,8,2,8,2
DATA 6,1,6,1,10,1,10,1,11,1,11,1,12,1,12,1,1,2,1,3,1,3,1,3,1,3,1,2,4,2,4,2
DATA 6,1,6,1,10,1,10,1,1,2,1,2,3,2,3,2,6,2,6,2,3,2,3,2,1,2,1,2,10,1,10,1
DATA 6,1,6,1,10,1,10,1,1,2,1,2,3,2,3,2,6,2,6,2,3,2,3,2,1,2,1,2,10,1,10,1
DATA 11,1,11,1,3,2,3,2,6,2,6,2,8,2,8,2,9,2,9,2,8,2,8,2,6,2,6,2,3,2,3,2
DATA 6,1,6,1,10,1,10,1,1,2,1,2,3,2,3,2,6,2,6,2,3,2,3,2,1,2,1,2,10,1,10,1
DATA 1,2,1,2,5,2,5,2,8,2,8,2,10,2,10,2,11,1,11,1,3,2,3,2,6,2,6,2,8,2,8,2
DATA 6,1,6,1,10,1,10,1,11,1,11,1,12,1,12,1,1,2,1,3,1,3,1,3,1,3,1,2,4,2,4,2
DATA 6,1,0,0,0,0,0,0,0,0,0,0,0,0,6,1,5,3,6,3,1,3,11,2,10,2,0,0,6,1,5,3
DATA 6,3,1,3,3,3,1,3,6,3,10,3,6,4,6,4,4,4,4,4,3,4,3,4,1,4,1,4,11,1,11,1
DATA 3,2,3,2,6,2,6,2,8,2,8,2,9,2,9,2,8,2,8,2,6,2,6,2,3,2,3,2,6,1,6,1
DATA 10,1,10,1,1,2,1,2,3,2,3,2,6,2,6,2,3,1,3,1,1,2,1,2,10,1,10,1,1,2,1,2
DATA 5,2,5,2,8,2,8,2,10,2,10,2,11,1,11,1,3,2,3,2,6,2,6,2,8,2,8,2,6,1,6,1
DATA 10,1,10,1,11,1,11,1,12,1,12,1,1,2,11,1,8,1,6,1,6,1,0,0
'
DATA 0,0,6,4,6,4,0,0,6,4,0,0,0,0,0,0,6,4,6,4,0,0,10,4,0,0,6,4,3,4,1,4
DATA 0,0,6,4,6,4,0,0,6,4,0,0,0,0,0,0,6,4,6,4,0,0,10,4,0,0,6,4,3,4,1,4
DATA 0,0,6,4,6,4,0,0,6,4,0,0,0,0,0,0,6,4,6,4,0,0,9,4,0,0,6,4,3,4,1,4
DATA 0,0,6,4,6,4,0,0,6,4,0,0,0,0,0,0,6,4,6,4,0,0,10,4,0,0,6,4,3,4,1,4
DATA 0,0,1,5,12,4,0,0,9,4,6,4,3,4,1,4,1,5,11,4,0,0,9,4,0,0,0,0,0,0,0,0
DATA 0,0,6,4,4,4,4,4,3,4,3,4,2,4,2,4,0,0,1,5,1,5,1,5,1,5,0,0,0,0,0,0
DATA 9,4,10,4,1,5,0,0,6,5,6,5,0,0,0,0,9,4,11,4,1,5,6,5,0,0,0,0,0,0,0,0
DATA 0,0,1,5,11,4,0,0,10,4,6,4,3,4,1,4,6,4,6,4,0,0,10,4,0,0,0,0,0,0,0,0
DATA 8,4,9,4,1,5,0,0,6,5,6,5,0,0,0,0,8,4,9,4,1,5,6,5,0,0,0,0,0,0,0,0
DATA 0,0,1,5,11,4,0,0,10,4,6,4,3,4,1,4,6,4,6,4,0,0,10,4,0,0